package it.polimi.traveldream.ejb;

import java.sql.SQLException;
import java.sql.SQLIntegrityConstraintViolationException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import it.polimi.traveldream.ejb.management.EscursioneDTO;
import it.polimi.traveldream.ejb.management.EscursioneMgr;
import it.polimi.traveldream.ejb.management.VoloDTO;

import javax.annotation.Resource;
import javax.ejb.EJBContext;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.servlet.ServletException;

import org.eclipse.persistence.exceptions.QueryException;

@Stateless
public class BeanEscursione implements EscursioneMgr{
	@PersistenceContext
    private EntityManager em;
	
	@Resource
	private EJBContext context;
	

	@Override
	public void save(EscursioneDTO escursione) {
		Escursione escNew = new Escursione(escursione);
		em.persist(escNew);
		
	}

	@Override
	public void update(EscursioneDTO escursione) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void remove(EscursioneDTO escursione) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public EscursioneDTO getEscursioneDTO() {
		// TODO Auto-generated method stub
		return null;
	}

	public static EscursioneDTO convertToDTO(Escursione escursioneBean) {
		EscursioneDTO escursione = new EscursioneDTO();
		escursione.setCitta(escursioneBean.getCittaBean());
		escursione.setIdEscursione(escursioneBean.getIdEscursione());
		escursione.setNome(escursioneBean.getNome());
		escursione.setInizio(escursioneBean.getData());
		escursione.setPostiRimanenti(escursioneBean.getPostiRimanenti());
		escursione.setPrezzoSingolo(escursioneBean.getPrezzoSingolo());
		return escursione;
	}

	@Override
	public List<EscursioneDTO> getListaEscursioni() {

		List<EscursioneDTO> list2 = new ArrayList<EscursioneDTO>();
		List<Escursione> list = em.createNamedQuery(Escursione.FINDALL, Escursione.class).getResultList();
		for (Escursione a: list) {
			list2.add(convertToDTO(a));
		}
		return list2;
	}

	@Override
	public void elimina(EscursioneDTO esc) {
		Query query=em.createNamedQuery(Escursione.DELETE,Escursione.class);
		query.setParameter(1,esc.getIdEscursione());
		query.executeUpdate();
	}


	@Override
	public List<EscursioneDTO> getEscById(int id) {
		Query query=em.createNamedQuery(Escursione.FINDBYID,Escursione.class);
		query.setParameter(1, id);
		List<Escursione> list = castList(Escursione.class,query.getResultList());
		List<EscursioneDTO> ret = new ArrayList<EscursioneDTO>();
		for (Escursione e: list) {
			ret.add(convertToDTO(e));
		}
		return ret;
	}
	
	private static <T> List<T> castList(Class<? extends T> clazz, Collection<?> c) {
	    List<T> r = new ArrayList<T>(c.size());
	    for(Object o: c)
	      r.add(clazz.cast(o));
	    return r;
	}
	
	@Override
	public List<Integer> listaIDEscursioni() {
		return null;
	}
	
	
	
	
}
